
package models.dao;

import java.sql.*;
import java.util.LinkedList;
import java.util.List;

import models.entity.Venta;
import utilidades.DataBaseInstance;

public class VentaDao {
    
     protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }
    public Connection conectar(){
        return getConnection();
    }
    public void testConection(){
        getConnection();
    }

    public List<Venta> findAll() {
        List<Venta> listaVenta = new LinkedList<Venta>();
        ResultSet result = null;

        try {

            String query = "SELECT * FROM VENTA";
            Statement stmt = getConnection().createStatement();
            result = stmt.executeQuery(query);

            while (result.next()) {
              
                Venta venta = new Venta();
                venta.setCodigo(result.getInt("codigo"));
                venta.setFecha(result.getString("fecha"));
                venta.setUsuario_codigo(result.getInt("Usuario_codigo"));
                venta.setVenta_totalpagar(result.getDouble("Venta_totalpagar"));                   
                listaVenta.add(venta);
                
            }

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.out.println(se.toString());
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return listaVenta;
    }

    public Venta findById(int ventaId) {
        ResultSet result = null;
        Venta venta = null;

        try {
            // Componemos la sentencia SQL para obtener los usuarios.
            String query = "SELECT * FROM VENTA WHERE  codigo = ?";

            // Ejecutamos la query y obtenemos el resultado.
            PreparedStatement stmt = getConnection().prepareStatement(query);
            stmt.setInt(1, ventaId);
            result = stmt.executeQuery();

            // Vemos si no ha devuelto ningun resultado.
            if (!result.next()) {
                throw new SQLException();
            }

            // Construimos una VO para el usuario.
            venta = new Venta();
            venta.setCodigo(result.getInt("codigo"));
            venta.setFecha(result.getString("fecha"));
            venta.setUsuario_codigo(result.getInt("Usuario_codigo"));
            venta.setVenta_totalpagar(result.getDouble("Venta_totalpagar"));              
            
            
            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return venta;
    }

    public void save(Venta venta) {
System.out.println("INTO ....");
        PreparedStatement saveVenta;
        try {

            if (venta.getCodigo()== 0) {
                
                  System.out.println("INSERT INTO  ....");
                
                saveVenta = getConnection().prepareStatement(
                 "INSERT INTO  VENTA (codigo, fecha, usuario_codigo, venta_totalpagar) "
                                    + "VALUES (?, ?, ?,?,?)" );
                saveVenta.setInt(1, venta.getCodigo());
                saveVenta.setString(2, venta.getFecha());
                saveVenta.setInt(3, venta.getUsuario_codigo());
                saveVenta.setDouble(4, venta.getVenta_totalpagar());
               
                
                
                
            } else {
                System.out.println("UPDATE ....");
                saveVenta = getConnection().prepareStatement(
                        "UPDATE VENTA SET   "
                                + "codigo = ?, "
                                + "fecha = ?, "
                                + "usuario_codigo = ?, "
                                + "venta_totalpagar = ?, "    
                                );
                
                saveVenta.setInt(1, venta.getCodigo());
                saveVenta.setString(2, venta.getFecha());
                saveVenta.setInt(3, venta.getUsuario_codigo());
                saveVenta.setDouble(4, venta.getVenta_totalpagar());
                
            }

            saveVenta.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }

    public void delete(Venta venta) {
        PreparedStatement saveVenta;
        try {

            if (venta.getCodigo()> 0) {
                saveVenta = getConnection().prepareStatement(
                        "DELETE FROM VENTA WHERE codigo = ?");

                saveVenta.setInt(1, venta.getCodigo());
                saveVenta.executeUpdate();
            }


            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }

    protected void closeConnection() {
        DataBaseInstance.closeConnection();
    }
}
